Featuretools 是一個 Python 開放資源 library,他可以自動執行特徵工程。自動特徵工程和其他機器學習主題(topics)一樣,是一個建立在簡單的觀念基礎上的複雜主題。
Featuretools 的主要包括:
Entities and EntitySets
Relationships between tables
Feature primitives: aggregations and transformations
Deep feature synthesis:是一個特徵工程的方法。
Entities and Entitysets
一個entity就是一個表格(table)或一個 Pandas 的 dataframe。
一個entityset就是一個多個關聯性表格的集合。
建立一個entity:
# Entity set with id applications
es = ft.EntitySet(id = 'clients')
定義entity的資料:
# Entities 有一個 unique index
es = es.entity_from_dataframe(entity_id = 'clients', dataframe = clients, index = 'ID')
# Entities 沒有 unique index
es = es.entity_from_dataframe(entity_id = 'clients', dataframe = clients,
make_index = True, index = 'ID')
Relationships
Relationships(關聯性) 就是關聯性資料庫的基本概念。一個多對一 (one-to-many) 關聯性就類似父母(parent) 對子女(child),一個父母是一個個人,可以有多個孩子,孩子可以有他們自己的多個孩子。在 parent 表格中, 每一個人是一列,在 parent 表格中的每一個人,可以多個孩子(多列) 在 child 表格中。
兩個表格經由共同的變數連接起來 對於每個關聯性 我們必須說明父母和孩子的變數。
# 建立關聯性
r_client_previous = ft.Relationship(es['clients']['client_id'],
es['loans']['client_id'])
# Add the relationship to the entity set
es = es.add_relationship(r_client_previous)
es
Entityset: clients
Entities:
clients [Rows: 25, Columns: 6]
loans [Rows: 443, Columns: 8]
Relationships:
loans.client_id -> clients.client_id
primitive 就是我們通常使用建立特徵的方法。Featuretools 運用這些方法自動建立新的特徵,且可以把他們堆疊起來 建立更複雜的特徵。
Feature primitives 包括下列兩種:
Aggregation: 它的功能包括:加總每一個父母下孩子資料,統計出 mean, min, max, or standard deviation。做這些運算時,它運用到表格之間的關聯性。
features, feature_names = ft.dfs(entityset = es, target_entity = 'clients',
agg_primitives = ['mean', 'max', 'percent_true', 'last'],
trans_primitives = ['years', 'month', 'diff'])
Transformation:應用在一個表個下一個或多個欄位的運算,例如:計算一個欄位的絕對值,或兩個欄位的差。
Deep Feature Synthesis (DFS) 是 featuretools 建立新特徵的過程。它運用 feature primitive 在 entityset 上。
自動特徵工程,建立新的特徵
features, feature_names = ft.dfs(entityset=es, target_entity='clients',
max_depth = 2)